home *** CD-ROM | disk | FTP | other *** search
- {
- I tried this but the two (my original procedure and your code) produce
- slightly different values. Compile this and run in DOS:
- }
- uses dos;
-
- function timer:real;
- var r:registers; h,m,s,t:real;
- begin
- r.ax:=44*256;
- msdos(dos.registers(r));
- h:=(r.cx div 256);
- m:=(r.cx mod 256);
- s:=(r.dx div 256);
- t:=(r.dx mod 256);
- timer:=h*3600+m*60+s+t/100;
- end;
-
- function timer2:real;
- begin
- timer2:=meml[$0040:$006c]/18.2;
- end;
-
- begin
- write(^M^J'Ctrl-Break to Quit'^M^J^M^J+
- 'Int 21h Version $0040:$006C Version'^M^J+
- '--------------- -------------------'^M^J);
- repeat
- write(timer2:3:5,' ',timer:3:5,^M);
- until false=true;
- end.
-
- ... and tell me if you notice the difference as well. I tried swapping
- the timer and timer2 positions in the write() function to see if it was
- just the difference between the time the two functions are executed and
- it was not caused by that.
-
- brian.petersen@604.sasbbs.com
-
- {
- BP> Could someone please convert this to BASM? It returns the number of
- BP> seconds since midnight in the form of a real variable.
-
- BP> function timer:real;
- BP> var r:registers; h,m,s,t:real;
- BP> begin
- BP> r.ax:=$2c00;
- BP> msdos(r);
- BP> h:=(r.cx div 256);
- BP> m:=(r.cx mod 256);
- BP> s:=(r.dx div 256);
- BP> t:=(r.dx mod 256);
- BP> timer:=h*3600+m*60+s+t/100;
- BP> end;
- }
- I think, that's the way it should be optimized (and corrected). Everything
- else would be overkill:
- function timer:longint;
- { returns number of 1/100 s since midnight }
- var dostime:record t,s,m,h:byte end;
- begin
- asm
- mov ax, 2c00h
- int 21h
- mov word ptr dostime.m, cx
- mov word ptr dostime.t, dx
- end;
- with dostime do
- timer:=(longint(h*60+m)*60+s)*100+t
- end;
-